# -*- coding: utf-8 -*-
print("--------------------1、变量----------------")
counter = 100  # 赋值整型变量
miles = 1000.0  # 浮点型
name = "John"  # 字符串

print(counter)
print(miles)
print(name)
# 为多个变量赋值
a = b = c = 1

print(a)
print(b)
print(c)
# 为多个变量赋值 两个整型对象 1 和 2 分别分配给变量 a 和 b，字符串对象 "john" 分配给变量 c
a, b, c = 1, 2, "john"
print(a)
print(b)
print(c)
print("--------------------2、数字类型----------------")
# 数字数据类型用于存储数值。
#
# 他们是不可改变的数据类型，这意味着改变数字数据类型会分配一个新的对象。
#
# 当你指定一个值时，Number对象就会被创建：

var1 = 1
var2 = 10
print(var1)
print(var2)
# 可以使用del语句删除一些对象的引用。
# del语句的语法是：

del [var1, var2]
# print(var1)  # var1' is not defined
# print(var2)
# 您可以通过使用del语句删除单个或多个对象的引用。例如：
# del var1  # var1' is not defined
# del var1, var2

# Python支持四种不同的数字类型：
#
# int（有符号整型）
# long（长整型[也可以代表八进制和十六进制]）
# float（浮点型）
# complex（复数）
print(132, 232342342342342, 3.14, 4-2j)
print("--------------------3、字符串----------------")
# 字符串或串(String)是由数字、字母、下划线组成的一串字符。
# 一般记为 :
# s="a1a2···an"(n>=0)
# 它是编程语言中表示文本的数据类型。
#
# python的字串列表有2种取值顺序:
#
# 从左到右索引默认0开始的，最大范围是字符串长度少1
# 从右到左索引默认-1开始的，最大范围是字符串开头
# [头下标:尾下标] 获取的子字符串包含头下标的字符，但不包含尾下标的字符 0开始

s = "hello world"
print(s[1:4])
print(s[-5:-1])
string = 'Hello World!'

print(string)    # 输出完整字符串
print(string[0])  # 输出字符串中的第一个字符
print(string[2:5])  # 输出字符串中第三个至第五个之间的字符串
print(string[2:])  # 输出从第三个字符开始的字符串
print(string * 2)  # 输出字符串两次
print(string + "TEST")  # 输出连接的字符串
print(""" 你好
换行了""")

# --------------------------------------------格式化
s = 'Hello, %s' %  'world'
print("格式化", s)
num = 1000
s = 'Hi, %s, you have $%d.' % ('Michael', num)
print(s)
# 占位符	替换内容
# %d	整数
# %f	浮点数
# %s	字符串
# %x	十六进制整数

print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)

# 有些时候，字符串里面的%是一个普通字符怎么办？这个时候就需要转义，用%%来表示一个%：
s = 'growth rate: %d %%' % 7
print(s)

s1 = 72
s2 = 85

r = (85 - 72) % 72
print("%.1f%%" %  r)

# ---------------------------------------format()----------------------
# 另一种格式化字符串的方法是使用字符串的format()方法，它会用传入的参数依次替换字符串内的占位符{0}、{1}……，不过这种方式写起来比%要麻烦得多：

s = 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)

print(s)

#  ------------------------------------------ f-string ----------------
#最后一种格式化字符串的方法是使用以f开头的字符串，称之为f-string，它和普通字符串不同之处在于，字符串如果包含{xxx}，就会以对应的变量替换：

r = 2.5
s = 3.14 * r *2

s = f'The area of a circle with radius {r} is {s:.2f}'
print(s)




print("--------------------4、列表----------------")

list_ = ['runoob', 786, 2.23, 'john', 70.2]
tinylist_ = [123, 'john']

print(list_)  # 输出完整列表
print(list_[0])  # 输出列表的第一个元素
print(list_[1:3])  # 输出第二个至第三个元素
print(list_[2:])  # 输出从第三个开始至列表末尾的所有元素
print(tinylist_ * 2)  # 输出列表两次
print(list_ + tinylist_)  # 打印组合的列表
print("--------------------5、元组----------------")
# 元组是另一个数据类型，类似于List（列表）。
# 元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值，相当于只读列表。
tuple_ = ('runoob', 786, 2.23, 'john', 70.2)
list_ = ['runoob', 786, 2.23, 'john', 70.2]
# tuple[2] = 1000    # 元组中是非法应用
print("元组数据:", tuple_[0])
# 列表中是合法应用
list_[2] = 1000
print("--------------------6、字典----------------")
dict_ = {}
dict_['one'] = "This is one"
dict_[2] = "This is two"

tinydict = {'name': 'john', 'code': 6734, 'dept': 'sales'}

print(dict_['one'])  # 输出键为'one' 的值
print(dict_[2])  # 输出键为 2 的值
print(tinydict)  # 输出完整的字典
print(tinydict.keys())  # 输出所有键
print(tinydict.values())  #  输出所有值
#
# Python数据类型转换
# 有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。
#
# 以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象，表示转换的值。
#
# int(x [,base])将x转换为一个整数
#
# long(x [,base] ) 将x转换为一个长整数
#
# float(x) 将x转换到一个浮点数
#
# complex(real [,imag]) 创建一个复数
#
# str(x) 将对象 x 转换为字符串
#
# repr(x) 将对象 x 转换为表达式字符串
#
# eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象
#
# tuple(s)将序列 s 转换为一个元组
#
# list(s)将序列 s 转换为一个列表
#
# set(s) 转换为可变集合
#
# dict(d)创建一个字典。d 必须是一个序列 (key,value)元组。
#
# frozenset(s)转换为不可变集合
#
# chr(x)将一个整数转换为一个字符
#
# unichr(x)将一个整数转换为Unicode字符
#
# ord(x)将一个字符转换为它的整数值
#
# hex(x)将一个整数转换为一个十六进制字符串
#
# oct(x)将一个整数转换为一个八进制字符串
